package servlet;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.EJB;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;

import bean.remote.ArticuloRemoto;
import dominio.Articulo;
import dominio.Electrodomestico;
import dominio.Infantil;
import dominio.Moda;
import dominio.Mueble;

/**
 * Devuelve la lista de articulos enteros
 * Guarda un articulo nuevo en la base de datos
 * @author Maxi.Herrera
 *
 */
public class ArticuloServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = -5448958089501239640L;

	private final static Logger logger = Logger
			.getLogger(ArticuloServlet.class);

	@EJB(beanName = "articuloBean")
	private ArticuloRemoto articuloRemoto;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {

		List<Articulo> all = articuloRemoto.findAll();

		String page = "articulos.jsp";

		req.setAttribute("data", all);
		// Disptching request
		RequestDispatcher dispatcher = req.getRequestDispatcher(page);
		if (dispatcher != null) {
			dispatcher.forward(req, resp);
		}
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {

		final String uploadDirectory = System.getenv("JBOSS_HOME")
				+ "/welcome-content/photos";

		Map<String, String> parametros = new HashMap<String, String>();

		try {
			List<FileItem> multiparts = new ServletFileUpload(
					new DiskFileItemFactory()).parseRequest(req);
			for (FileItem fileItem : multiparts) {
				if (fileItem.isFormField()) {
					parametros.put(fileItem.getFieldName(),
							fileItem.getString());
				} else {
					String name = fileItem.getName();
					String path = "http://" + req.getServerName() + ":"
							+ req.getServerPort() + "/photos/" + name;
					String pathSaved = uploadDirectory + File.separator + name;
					parametros.put("foto", path);
					fileItem.write(new File(pathSaved));
				}
			}
		} catch (FileUploadException e) {
			logger.error("Error en el upload de la imagen", e);
		} catch (Exception e) {
			logger.error("Problema general", e);
		}

		String tipo = parametros.get("tipo");

		Articulo nuevoArticulo = null;

		if (tipo.equalsIgnoreCase("moda")) {
			nuevoArticulo = new Moda();
			((Moda) nuevoArticulo).setTalle(parametros.get("talle"));
			((Moda) nuevoArticulo).setColor(parametros.get("color"));
		} else if (tipo.equalsIgnoreCase("mueble")) {
			nuevoArticulo = new Mueble();
			((Mueble) nuevoArticulo).setMaterial(parametros.get("material"));
		} else if (tipo.equalsIgnoreCase("infantil")) {
			nuevoArticulo = new Infantil();
			((Infantil) nuevoArticulo).setEdadRecomendada(parametros
					.get("edadrecomendada"));
		} else if (tipo.equalsIgnoreCase("electrodomestico")) {
			nuevoArticulo = new Electrodomestico();
			((Electrodomestico) nuevoArticulo).setFichaTecnica(parametros
					.get("fichatecnica"));
		}

		nuevoArticulo.setCodigo(Long.valueOf(parametros.get("codigo")));
		nuevoArticulo.setNombre(parametros.get("nombre"));
		nuevoArticulo.setDescripcion(parametros.get("descripcion"));
		nuevoArticulo.setMarca(parametros.get("marca"));
		nuevoArticulo.setPrecio(new Float(parametros.get("precio")));
		nuevoArticulo.setOrigen(parametros.get("origen"));
		nuevoArticulo.setFoto(parametros.get("foto"));
		articuloRemoto.crear(nuevoArticulo, true);

		// Disptching request
		RequestDispatcher dispatcher = req.getRequestDispatcher("index.jsp");
		if (dispatcher != null) {
			dispatcher.forward(req, resp);
		}
	}
}
